深入讨论细节之前，首先了解一下为什么有三种定义内核的方式，以及每种方法的优缺点。图10-1给出了一个表。\par

内核是用来表示计算单元的，内核的许多实例通常会在加速器上执行。SYCL支持多种方式来表示内核，以便无缝地集成到各种代码库中，同时在各种加速器类型上高效地执行。\par

\hspace*{\fill} \par %插入空行
图10-1 三种表示内核的方法
\begin{table}[H]
	\begin{tabular}{|l|p{12cm}|}
		\hline
		\textbf{\begin{tabular}[c]{@{}l@{}}内核表示\end{tabular}}                         & \textbf{描述}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \\ \hline
		\textbf{Lambda 表达式}                                                                       & \begin{tabular}[c]{@{}l@{}}优点:\\ ·Lambda表达式是一种简洁的方式，可以在使用的地方表示内核。\\  ·Lambda表达式是现代C++代码库中表示类内核操作的一种方式。\\ ·Lambda捕获规则自动将数据传递给内核。\\ \\ 缺点:\\ ·以Lambda表达式表示的内核不能模板化，不能重用，也不能作为\\库提供。\\ ·一些代码库可能不支持Lambda语法。\end{tabular}                                                                                                                                                                                                                                           \\ \hline
		\textbf{\begin{tabular}[c]{@{}l@{}}命名函数对象\\ (Functor)\end{tabular}}               & \begin{tabular}[c]{@{}l@{}}优点:\\ ·函数可以模板化、重用，并作为库的一部分提供。\\ ·函数提供对传递给内核数据的更多控制。\\ \\ 缺点:\\ ·用函数对象表示内核比用Lambda表达式表示的内核使用\\更多的代码。\\ ·内核参数必须显式地传递给函数对象，不能自动捕获。\end{tabular}                                                                                                                                                                                                                                                                                                       \\ \hline
		\textbf{\begin{tabular}[c]{@{}l@{}}与其他语言或API \end{tabular}} & \begin{tabular}[c]{@{}l@{}}优点:\\ ·允许重用以前编写的内核或库。\\ ·允许大型应用程序代码库增量地添加对SYCL的支持。\\ ·来自其他API的内核语言可能支持尚未添加或难以用SYCL表达\\的特性。\\ \\ 缺点:\\ ·互操作性是一个可选特性，不是所有SYCL实现或设备都支持该\\特性。\\ ·用其他API编写的内核不是由SYCL设备编译器编译的，这可能会\\限制编译时对语法、内核参数的类型检查和优化。\\ ·用其他API编写的内核可能不支持最新的C++特性。\end{tabular} \\ \hline
	\end{tabular}
\end{table}









